<!DOCTYPE HTML>
<html>
<head>
<title>FileReadLine | AutoHotkey</title>
<meta name="description" content="The FileReadLine command reads the specified line from a file and stores the text in a variable." />
<meta name="ahk:equiv-v2" content="objects/File.htm#ReadLine" />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>FileReadLine</h1>

<p>读取文件指定行的文本并保存到<a href="../Variables.htm">变量</a>.</p>

<pre class="Syntax"><span class="func">FileReadLine</span>, OutputVar, Filename, LineNum</pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>OutputVar</dt>
  <dd><p>用来存储获取的文本的<a href="../Variables.htm">变量</a>名.</p></dd>

  <dt>Filename</dt>
  <dd><p>要访问的文件名, 如果未指定绝对路径, 则假定在 <a href="../Variables.htm#WorkingDir">%A_WorkingDir%</a> 中. 支持 Windows 和 Unix 格式; 即文件的行结束符可以是回车和换行符(`r`n) 或只是换行符(`n).</p></dd>

  <dt>LineNum</dt>
  <dd><p>要读取的行号(首行为 1, 第二行为 2, 依此类推). 可以为<a href="../Variables.htm#Expressions">表达式</a>.</p>
    <p>如果指定的行号大于文件的行数, 则 <a href="../misc/ErrorLevel.htm">ErrorLevel</a> 被设置为 1 且 <em>OutputVar</em> 不会发生变化. 当指定的行号为文件的最后一行且此行为空, 同时不是以 新行/CRLF 结束时, 也会发生这种情况.</p></dd>

</dl>

<h2 id="Error_Handling">错误处理</h2>
<p><span class="ver">[v1.1.04+]</span>: 此命令失败时会抛出异常. 想了解更多信息, 请参阅<a href="Catch.htm#RuntimeErrors">运行时错误</a>.</p>
<p>成功时 <a href="../misc/ErrorLevel.htm">ErrorLevel</a> 被置为 0. 否则它被设置为 1 且 <em>OutputVar</em> 的原始内容不会发生变化.</p>
<p><a href="../Variables.htm#LastError">A_LastError</a> 被设置为操作系统 GetLastError() 函数返回的结果.</p>

<h2 id="Remarks">备注</h2>
<p>强烈建议仅对于小文件或只需要单行文本的情况时使用此命令. 要扫描并处理大量的文本行(一行接一行), 请使用<a href="LoopReadFile.htm">文件读取循环</a>来获取最好的性能. 要读取整个文件到变量中, 请使用 <a href="FileRead.htm">FileRead</a>.</p>
<p>虽然一行中任何前导和尾随的 tab 和空格都会被写入 <em>OutputVar</em>, 但是行末的换行符(`n) 则不会. 当 <a href="AutoTrim.htm">AutoTrim</a> 设置打开(默认的) 时, 任何变量都可以通过赋值给自己来移除变量两端的 tab 和空格. 例如: <code>MyLine = %MyLine%</code>.</p>
<p>最大可以读取包含 65,534 字符的长行. 如果行的长度超过这个极限, 则此命令无法读取剩余的字符(此时应使用 <a href="FileRead.htm">FileRead</a> 或<a href="LoopReadFile.htm">文件读取循环</a>代替).</p>
<h2 id="Related">相关</h2>
<p><a href="FileOpen.htm">FileOpen()</a> / <a href="../objects/File.htm#ReadLine">File.ReadLine()</a>, <a href="FileRead.htm">FileRead</a>, <a href="FileAppend.htm">FileAppend</a>, <a href="LoopReadFile.htm">文件读取循环</a>, <a href="IniRead.htm">IniRead</a></p>
<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a class="ex_number" href="#ExBasic"></a> 逐行读取一个文本文件. 注意, 使用<a href="LoopReadFile.htm">文件读取循环</a>可以达到同样的效果(但性能更好).</p>
<pre>Loop
{
    FileReadLine, line, C:\My Documents\ContactList.txt, %A_Index%
    if ErrorLevel
        break
    MsgBox, 4, , Line #%A_Index% is "%line%".  Continue?
    IfMsgBox, No
        return
}
MsgBox, The end of the file has been reached or there was a problem.
return</pre>
</div>

</body>
</html>